/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package charts;

import Jama.Matrix;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.labels.StandardXYItemLabelGenerator;
import org.jfree.chart.labels.StandardXYToolTipGenerator;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.PolarPlot;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.DefaultPolarItemRenderer;
import org.jfree.chart.renderer.xy.StandardXYItemRenderer;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;

/**
 *
 * @author Memet
 */
public class CreateCharts {
    /**
     * Maakt een Polar grafiek voor de E-modulus
     * @param mxtc Matrix met de waarden over 360 graden
     * @param naam Naam van de grafiek
     * @param serienaam Naam van de serie
     * @return PolarChart E over theta
     */
    public static JFreeChart createPolarEChart(Matrix mxtc, String naam, String serienaam) {

        double thetaInc = mxtc.get(1, 0)-mxtc.get(0, 0);
        final XYSeriesCollection dataset = new XYSeriesCollection();
        final XYSeries series = new XYSeries(serienaam);
        int i = 0;
        for (double theta = 0.0; theta < 360.0; theta += thetaInc) {
            final double radius = mxtc.get(i, 1)/1e9;
            series.add(theta, radius);
            i++;
        }
        dataset.addSeries(series);
        final JFreeChart chart = ChartFactory.createPolarChart(
            naam, dataset, true, true, false
        );
        final PolarPlot plot = (PolarPlot) chart.getPlot();
        final DefaultPolarItemRenderer renderer = (DefaultPolarItemRenderer) plot.getRenderer();
        renderer.setSeriesFilled(2, true);
        return chart;
    }

     /**
     * Maakt een Polar grafiek voor de G12
     * @param mxtc Matrix met de waarden over 360 graden
     * @param naam Naam van de grafiek
     * @param serienaam Naam van de serie
     * @return PolarChart G over theta
     */
    public static JFreeChart createPolarGChart(Matrix mxtc, String naam, String serienaam) {

        double thetaInc = mxtc.get(1, 0)-mxtc.get(0, 0);
        final XYSeriesCollection dataset = new XYSeriesCollection();
        final XYSeries series = new XYSeries(serienaam);
        int i = 0;
        for (double theta = 0.0; theta < 360.0; theta += thetaInc) {
            final double radius = mxtc.get(i, 5)/1e9;
            series.add(theta, radius);
            i++;
        }
        dataset.addSeries(series);
        final JFreeChart chart = ChartFactory.createPolarChart(
            naam, dataset, true, true, false
        );
        final PolarPlot plot = (PolarPlot) chart.getPlot();
        final DefaultPolarItemRenderer renderer = (DefaultPolarItemRenderer) plot.getRenderer();
        renderer.setSeriesFilled(2, true);
        return chart;
    }

    /**
     * Maakt een Polar grafiek voor de Mu12
     * @param mxtc Matrix met de waarden over 360 graden
     * @param naam Naam van de grafiek
     * @param serienaam Naam van de serie
     * @return PolarChart Mu12 over theta
     */
    public static JFreeChart createPolarMuChart(Matrix mxtc, String naam, String serienaam) {

        double thetaInc = mxtc.get(1, 0)-mxtc.get(0, 0);
        final XYSeriesCollection dataset = new XYSeriesCollection();
        final XYSeries series = new XYSeries(serienaam);
        int i = 0;
        for (double theta = 0.0; theta < 360.0; theta += thetaInc) {
            final double radius = mxtc.get(i, 3);
            series.add(theta, radius);
            i++;
        }
        dataset.addSeries(series);
        final JFreeChart chart = ChartFactory.createPolarChart(
            naam, dataset, true, true, false
        );
        final PolarPlot plot = (PolarPlot) chart.getPlot();
        final DefaultPolarItemRenderer renderer = (DefaultPolarItemRenderer) plot.getRenderer();
        renderer.setSeriesFilled(2, true);
        return chart;
    }

     /**
     * Maakt een Lineare grafiek voor de E-modulus
     * @param mxtc Matrix met de waarden over 360 graden
     * @param naam Naam van de grafiek
     * @param serienaam Naam van de serie
     * @return LinearChart E over theta
     */
    public static JFreeChart createLinearEChart(Matrix mxtc, String naam, String serienaam)
    {
        double thetaInc = mxtc.get(1, 0)-mxtc.get(0, 0);
        final XYSeriesCollection dataset = new XYSeriesCollection();
        final XYSeries series = new XYSeries(serienaam);
        int i = 0;
        for (double theta = 0.0; theta < 180.0; theta += thetaInc) {
            final double radius = mxtc.get(i, 1)/1e9;
            series.add(theta-90, radius);
            i++;
        }
        dataset.addSeries(series);
        final JFreeChart chart = ChartFactory.createXYLineChart(
            naam,"Θ", "E [GPa]", dataset,PlotOrientation.VERTICAL, true, true, false
        );
        
        return chart;
    }

    /**
     * Maakt een Lineare grafiek voor de Mu12
     * @param mxtc Matrix met de waarden over 360 graden
     * @param naam Naam van de grafiek
     * @param serienaam Naam van de serie
     * @return LinearChart Mu12 over theta
     */
    public static JFreeChart createLinearMuChart(Matrix mxtc, String naam, String serienaam)
    {
        double thetaInc = mxtc.get(1, 0)-mxtc.get(0, 0);
        final XYSeriesCollection dataset = new XYSeriesCollection();
        final XYSeries series = new XYSeries(serienaam);
        int i = 0;
        for (double theta = 0.0; theta < 180.0; theta += thetaInc) {
            final double radius = mxtc.get(i, 3);
            series.add(theta-90, radius);
            i++;
        }
        dataset.addSeries(series);
        final JFreeChart chart = ChartFactory.createXYLineChart(
            naam,"Θ", "v", dataset,PlotOrientation.VERTICAL, true, true, false
        );

        return chart;
    }

   /**
     * Maakt een Lineare grafiek voor de G12
     * @param mxtc Matrix met de waarden over 360 graden
     * @param naam Naam van de grafiek
     * @param serienaam Naam van de serie
     * @return LinearChart G12 over theta
     */
    public static JFreeChart createLinearGChart(Matrix mxtc, String naam, String serienaam)
    {
        double thetaInc = mxtc.get(1, 0)-mxtc.get(0, 0);
        final XYSeriesCollection dataset = new XYSeriesCollection();
        final XYSeries series = new XYSeries(serienaam);
        int i = 0;
        for (double theta = 0.0; theta < 180.0; theta += thetaInc) {
            final double radius = mxtc.get(i, 5)/1e9;
            series.add(theta-90, radius);
            i++;
        }
        dataset.addSeries(series);
        final JFreeChart chart = ChartFactory.createXYLineChart(
            naam,"Θ", "G [GPa]", dataset,PlotOrientation.VERTICAL, true, true, false
        );

        return chart;
    }

    public static JFreeChart createAnglePly(String matname, Matrix data, int var)
    {
        //id, hoek, e, g, v, a
        XYSeriesCollection dataset = new XYSeriesCollection();
        
        XYSeries e = new XYSeries("E");
        XYSeries g = new XYSeries("G");
        XYSeries v = new XYSeries("N");
        XYSeries a = new XYSeries("A");


        for(int i = 0; i<data.getRowDimension(); i++)
        {
            e.add(data.get(i, 1), data.get(i, 2));
            g.add(data.get(i, 1), data.get(i, 3));
            v.add(data.get(i, 1), data.get(i, 4));
            a.add(data.get(i, 1), data.get(i, 5));
        }
        String varnm;
        if(var == 0){
            varnm = "A";
            dataset.addSeries(a);
        }else if(var == 1){
            varnm = "E [GPa]";
            dataset.addSeries(e);
        }else if(var == 2){
            varnm = "G [GPa]";
            dataset.addSeries(g);
        }else{
            varnm = "N";
            dataset.addSeries(v);
        }
        NumberFormat sienceFormat = new DecimalFormat("##0.##E0");

        StandardXYToolTipGenerator gen = new StandardXYToolTipGenerator(StandardXYItemLabelGenerator.DEFAULT_ITEM_LABEL_FORMAT, sienceFormat, sienceFormat);

        JFreeChart chart = ChartFactory.createXYLineChart(
            "Angle Ply - "+matname,"Θ", varnm, dataset,PlotOrientation.VERTICAL, true, true, false
        );
        XYPlot plot = chart.getXYPlot();
        plot.setRenderer(new StandardXYItemRenderer(StandardXYItemRenderer.LINES, gen));

        return chart;
    }
}